import {inBrowser} from './env'

export let mark
export let measure

/**
 * 2019-05-15
 * window.performance
 *    1.Web Performance API允许网页访问某些函数来测量网页和Web应用程序的性能
 */
if (process.env.NODE_ENV !== 'production') {
  const perf = inBrowser && window.performance
  /* istanbul ignore if */
  if (
    perf &&
    perf.mark &&
    perf.measure &&
    perf.clearMarks &&
    perf.clearMeasures
  ) {
    /**
     * 2019-05-15
     * 性能监控，了解大概，具体用法未清楚？？？
     * 1.mark 和 measure 这两个函数就是对 performance.mark() 和 performance.measure() 的封装
     * 2.performance.mark() 和 performance.measure() 这两个方法的详情，大家可以查看 Performance（https://developer.mozilla.org/en-US/docs/Web/API/Performance/mark）
     *
     * 3.用一个通俗的说法尽快让大家明白 mark 和 measure 的作用，* 首先 mark 可以理解为“打标记”，* 比如如下代码我们在 for 循环的前后各打一个标记：
     *    mark('for-start')
     *    for (let i = 0; i < 100; i++) {
     *      console.log(i)
     *    }
     *    mark('for-end')
     * 但是仅仅打标记是没有什么用的，这个时候就需要 measure 方法，它能够根据两个标记来计算这两个标记间代码的性能数据，你只需要这样即可：
     *    measure('for-measure', 'for-start', 'for-end')
     *
     * 4.百度网址参考：https://www.cnblogs.com/sunshq/p/5312231.html
     */
    mark = tag => perf.mark(tag)
    measure = (name, startTag, endTag) => {
      perf.measure(name, startTag, endTag)
      perf.clearMarks(startTag)
      perf.clearMarks(endTag)
      // perf.clearMeasures(name)
    }
  }
}
